import service from '@/utils/request.js'

const BASE_URL = import.meta.env.VITE_BASE_API


/**
 * 流式聊天接口
 * @param {Object} params - 请求参数
 * @param {string} params.memoryId - 会话ID
 * @param {string} params.roleId - 角色ID
 * @param {string} params.message - 用户消息
 * @returns {Promise} - 返回一个可读流
 */
export const streamChat = (params = {}) => {
    return fetch(BASE_URL + '/chat/chat', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Cache-Control': 'no-cache',
            'Connection': 'keep-alive',
            'Authorization': localStorage.getItem('token') || ''
        },
        body: JSON.stringify({
            memoryId: params.memoryId,
            roleId: params.roleId,
            message: params.message
        })
    });
};

/**
 * 处理流式响应
 * @param {Response} response - fetch API 返回的响应对象
 * @param {Function} onData - 每次接收到数据时的回调函数
 * @param {Function} onComplete - 数据接收完成时的回调函数
 */
export const handleStreamResponse = async (response, onData, onComplete) => {
    const reader = response.body.getReader();
    const decoder = new TextDecoder();

    try {
        while (true) {
            const {done, value} = await reader.read();

            if (done) {
                // 流结束时只调用完成回调，不再重复发送数据
                if (onComplete) {
                    onComplete();
                }
                break;
            }

            // 解码接收到的数据
            const text = decoder.decode(value, {stream: true});

            // 处理接收到的数据
            if (text && onData) {
                onData(text);
            }
        }
    } catch (error) {
        console.error('处理流式响应出错:', error);
        throw error;
    }
};

/**
 * 普通聊天接口
 * @param {Object} params - 请求参数
 * @returns {Promise} - 返回Promise对象
 */
export const chat = (params = {}) => {
    return service({
        url: '/chat/chat',
        method: 'POST',
        data: params,
        setting: {
            isToken: true
        }
    });
};

/**
 * 导出会话为PDF格式
 * @param {string} memoryId - 会话ID
 * @returns {Promise} - 返回Promise对象
 */
export const exportConversationToPdf = (memoryId) => {
    return service({
        url: `/chat/export/pdf/${memoryId}`,
        method: 'GET',
        responseType: 'blob', // 重要：设置响应类型为blob以处理文件下载
        setting: {
            isToken: true
        }
    });
};

/**
 * 导出会话为Markdown格式
 * @param {string} memoryId - 会话ID
 * @returns {Promise} - 返回Promise对象
 */
export const exportConversationToMarkdown = (memoryId) => {
    return service({
        url: `/chat/export/markdown/${memoryId}`,
        method: 'GET',
        responseType: 'blob', // 重要：设置响应类型为blob以处理文件下载
        setting: {
            isToken: true
        }
    });
};

/**
 * 下载文件的通用方法
 * @param {Blob} blob - 文件blob对象
 * @param {string} filename - 文件名
 */
export const downloadFile = (blob, filename) => {
    const url = window.URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = filename;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    window.URL.revokeObjectURL(url);
};
